/**
 * 保存所有注册的通知(包含标识符,要执行的代码,观察者)
 * 注册通知到通知中心
 * 可以移除通知
 * 发送通知给观察者(可能是多个)
 */

//保存
let notices = []

//注册
/**
 * @param {String} name 通知名称,不能冲突,建议写在全局文件中
 * @param {Function} selector	要执行的函数,发生相应事件即可执行
 * @param {Object} observer	观察者,一般来说是page或component
 */
function add(name,selector,observer){
	let notice = {
		name,
		selector,
		observer,
	}
	notices.push(notice);
}

//移除
/**
 * 移除通知,党观察者对象销毁时使用
 * @param {String} name	通知名称
 * @param {Object} observer	注册的观察者
 */
function remove(name,observer){
	for(let i=0;i<notices.length;i++){
		let noti = notices[i];
		if(noti.name == name && noti.observer == observer){
			notices.splice(i,1);
			return;
		}
	}
}

//发送
/**
 * @param {Object} name
 * @param {Object} info
 */
function post(name,info){
	for(let i=0;i<notices.length;i++){
		let noti = notices[i];
		if(noti.name == name){
			noti.selector(info)
		}
	}
}


module.exports = {
	add,
	remove,
	post
}